package packet

import (
	"errors"
	"hy_808/protocol/hygprs"
	"hy_808/util"
	"strconv"
)

type Can62 struct {
	hygprs.Fields
}

// 解析胎压数据
func (c *Can62) ParseTirePresse(data []byte) ([]map[string]any, error) { //解析胎压数据
	var presseList []map[string]any
	length := int(data[0]) //不包含第一个长度字节
	num := length / 5
	if length < 5 || length%5 > 0 {
		return nil, errors.New("胎压数据长度异常" + strconv.Itoa(length))
	}
	body := data[1:]
	start := 0

	for i := 0; i < num; i++ {
		m := make(map[string]any)
		b := body[start : start+5]
		m["tyreNo"] = b[0]                                    //轮胎编号
		m["pressure"] = util.Toint16ByOrder(b[1:3], "little") //胎压数值 小端序
		//单位°C，温度数据范围-40~+125°C，
		//如果最高位是 0，表示正温度，如果最高位是 1,表示负温度，例如:10001111= 零下15度  00101010=42C;
		val := strconv.Itoa(int(b[3] & 0x7f)) //温度绝对值

		if b[3]&0x80 != 0 { //负数
			val = "-" + val
		}
		m["wendu"] = val  //温度
		m["alarm"] = b[4] //报警故障
		tmp := m
		presseList = append(presseList, tmp)
		start += 5
	}
	return presseList, nil
}
